#include<iostream>
using namespace std;

class complex{
    public:
    complex(int real,int image)
    :_real(real)
    ,_image(image)
    {}
    void print () const
    {
        cout << _real <<"+" << _image <<"i" << endl;
    }
    //因为要重载++，会对操作数进行修改，所以倾向于使用成员函数的形式进行重载
    //前置++，返回值是是他本身，后置++返回值是他进行变化前的副本
    complex& operator ++()
    {
        cout << "operator++" << endl;
        _image++;
        _real++;
        return *this;
    }

    //后置++运算符重载函数的参数列表中加一个int
    //与前置++进行区分
    //返回类型是对象，不是引用，返回值是对象变化前的副本
    complex operator ++(int)
    {
        cout << "operator ++(int)" << endl;
        //调用拷贝构造创建一个副本，一会用于返回
        complex temp(*this);
        _real++;
        _image++;
        return temp;
    }
    private:
    int _real;
    int _image;
};

void test0()
{
    complex c1(2,3);
    complex c2(3,5);
    c1++;
    c1.print();
    ++c2;
    c2.print();

    (c1++).print();
    (++c2).print();
}
int main()
{
    test0();
    return 0;
}